/**
 * Copyright (c) 2011 ~ 2013 Deepin, Inc.
 *               2011 ~ 2013 jouyouyun
 *
 * Author:      jouyouyun <jouyouwen717@gmail.com>
 * Maintainer:  jouyouyun <jouyouwen717@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 **/

package main

import (
	"encoding/xml"
	"fmt"
	"io/ioutil"
	"os"
)

type XMLConfig struct {
	Version    string   `xml:"Version,attr"`
	Filter     []string `xml:"filter>Exclude"`
	ListenPort int      `xml:"listenPort"`
	timeout    int
	servthread int

	Service XMLService
}

type XMLService struct {
	Filter     []string `xml:"Filter>Exclude"`
	ListenPort int
	Timeout    int
	Servthread int
	Ip         string
}

func ParseUseUnmarshal() {
	var v XMLConfig

	xmlFile, err := ioutil.ReadFile("simple.xml")
	if err != nil {
		panic(err)
	}

	err1 := xml.Unmarshal(xmlFile, &v)
	if err1 != nil {
		panic(err1)
	}
	fmt.Println(v)
}

func main() {
	ParseUseUnmarshal()
	/*return*/

	xmlFile, err := os.Open("simple.xml")
	if err != nil {
		panic(err)
	}
	defer xmlFile.Close()

	decoder := xml.NewDecoder(xmlFile)
	for {
		t, _ := decoder.Token()

		if t == nil {
			fmt.Println("token is nil")
			break
		}

		switch se := t.(type) {
		case xml.StartElement:
			if se.Name.Local == "Autosync" {
				var d XMLConfig
				decoder.DecodeElement(&d, &se)
				fmt.Println(d)
			}
		}
	}
}
